#pragma once
class Snake {
public :
	Snake(double radius, std::ofstream& in_logfile, GVFField& ingvf, 
		double in_alpha=0.05, double in_beta=0.0, double in_kappa=0.6, double in_gamma=1.0,
		double in_mindist=0.5, double in_maxdist=2.0);
	~Snake(){};

	void deformSnake(int iter, int num_images = 8);

	friend std::ostream &operator<<(std::ostream &pipe, Snake &out);
	friend std::istream &operator>>(std::istream &pipe, Snake &in);
	
	GVFField* gvf;	//base force field acting on snake
	cv::Mat pts;	//current collection of snake points
	//std::ofstream snakefile;

	int ddepth;
	double alpha;
	double beta;
	double kappa;
	double gamma;
	double mindist;
	double maxdist;
	double avgdist;

	unsigned int currentstep;
	std::ofstream *snakefile;
};
